package feishu

import (
	"crypto/hmac"
	"crypto/sha256"
	"encoding/base64"
	"fmt"
)

// 设置签名校验后，向 webhook 发送请求需要签名校验来保障来源可信。
// 所校验的签名需要通过时间戳与秘钥进行算法加密，即将timestamp + "\n" + 密钥当做签名字符串，
// 使用 HmacSHA256 算法计算签名，再进行 Base64 编码。
// 其中，timestamp是指距当前时间不超过 1 小时（3600 秒）的时间戳，时间单位：s。例如，1599360473。
func GenSign(secret string, timestamp string) (string, error) {
	//timestamp + key 做sha256, 再进行base64 encode
	stringToSign := fmt.Sprintf("%v", timestamp) + "\n" + secret
	var data []byte
	h := hmac.New(sha256.New, []byte(stringToSign))
	_, err := h.Write(data)
	if err != nil {
		return "", err
	}
	signature := base64.StdEncoding.EncodeToString(h.Sum(nil))
	return signature, nil
}
